home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 July: Mac OS SDK / Dev.CD Jul 96 SDK / Dev.CD Jul 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWViews / Include / FWViews.fr < prev    next >
Encoding:
Text File  |  1996-04-25  |  14.9 KB  |  472 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //    File:                FWViews.fr
  3. //    Release Version:    $ ODF 1 $
  4. //
  5. //    Copyright:            (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  6. //========================================================================================
  7.  
  8. #ifndef FWVIEWS_FR
  9. #define FWVIEWS_FR
  10.  
  11. #ifndef FWARCOBJ_FR
  12. #include "FWArcObj.fr"
  13. #endif
  14.  
  15. #ifndef FWSTRING_FR
  16. #include "FWString.fr"
  17. #endif
  18.  
  19. #ifndef FWVIEWS_K
  20. #include "FWViews.k"
  21. #endif
  22.  
  23. #ifndef SLGCONST_K
  24. #include "SLGConst.k"
  25. #endif
  26.  
  27. //========================================================================================
  28. // type FW_RFixed
  29. //========================================================================================
  30.  
  31. #if 0
  32. type FW_RFixed
  33. {
  34. IntBits:
  35.     integer;
  36. FracBits:
  37.     integer = 0;
  38. };
  39. #else
  40. #define FW_RFixed longint
  41. #endif
  42.  
  43. // Handy macros for fixed coordinates  
  44. // (You're welcome to define shorter macros in your own resource files!)
  45.  
  46. #define FW_FIX(x)             ((x)*65536)
  47.  
  48. #define FW_ONE                 FW_FIX(1)
  49.  
  50. // This macro cannot be used for now because of a bug in ODFRC...
  51. #define FW_BOUNDS(l,t,r,b)    { FW_FIX(l),FW_FIX(t),FW_FIX(r),FW_FIX(b)}
  52.  
  53. //========================================================================================
  54. // type FW_RPoint
  55. //========================================================================================
  56.  
  57. type FW_RPoint
  58. {
  59. X:
  60.     FW_RFixed;
  61. Y:
  62.     FW_RFixed;
  63. };
  64.  
  65. //========================================================================================
  66. // type FW_RRect
  67. //========================================================================================
  68.  
  69. type FWRRect
  70. {
  71. Left:
  72.     FW_RFixed;
  73. Top:
  74.     FW_RFixed;
  75. Right:
  76.     FW_RFixed;
  77. Bottom:
  78.     FW_RFixed;
  79. };
  80.  
  81. //========================================================================================
  82. // type FW_RFont
  83. //========================================================================================
  84.  
  85. type FW_RFont(FW_kFontType) 
  86. {
  87.     FontSize:
  88.         FW_RFixed;
  89.     FontStyle:
  90.         integer;
  91.     FontName:
  92.         FW_RStringData;
  93. };
  94.  
  95. // Standard fonts defined in "SLGConst.k"
  96. #define FW_NORMAL_FONT    { FW_FIX(12), FW_kPlain, "applFont" }    // = Geneva on US systems
  97. #define FW_SYSTEM_FONT    { FW_FIX(12), FW_kPlain, "systemFont" }    // = Chicago on US systems
  98. #define FW_HELVETICA12    { FW_FIX(12), FW_kPlain, "Helvetica" }
  99. #define FW_TIMES12        { FW_FIX(12), FW_kPlain, "Times" }
  100. #define FW_COURIER12    { FW_FIX(12), FW_kPlain, "Courier" }
  101. #define FW_PALATINO12    { FW_FIX(12), FW_kPlain, "Palatino" }
  102.  
  103. //========================================================================================
  104. // type FW_RRadioCluster
  105. //========================================================================================
  106.  
  107. type FW_RRadioCluster : FW_RArchivableObject(Label='rcls')
  108. {
  109.     // Hidden fields keeping a reference to the superview containing the radio buttons
  110.     integer = FW_kPrivIDOnly;
  111. ViewClass:
  112.     longint = gSuperViewClassID; 
  113.     integer = FW_kPrivIDOnly;
  114. ViewID:
  115.     longint = gSuperViewObjectID; 
  116.  
  117.     // ---- RadioCluster fields    
  118.         
  119.     longint;            // Dummy field needed to work around an odfrc bug
  120.         
  121. RadioButtons:            // List of radio button ids
  122.     integer = $$CountOf(RadioArray);
  123.     array RadioArray
  124.     {
  125.         RadioId:        // The first radio in the list is turned on by default
  126.             longint;
  127.     };
  128. };
  129.  
  130. //========================================================================================
  131. // type FW_RView
  132. //========================================================================================
  133.  
  134. type FW_RView : FW_RArchivableObject(Label='view')
  135. {
  136.     // Hidden fields keeping a reference to its superview used in the view's initialization
  137.     integer = FW_kPrivIDOnly;
  138. ParentViewClass:
  139.     longint = FW_kPrivNULLObjectID;
  140.     integer = FW_kPrivIDOnly;
  141. ParentViewID:
  142.     longint = FW_kPrivNULLObjectID;
  143.  
  144.     // ---- View fields    
  145. ViewID:
  146.     longint;                // Must be unique within the same superview only
  147.                             // or leave it to 0 if you don't need to access this view
  148. Bounds:
  149.     FWRRect;                // MUST BE FIXED COORDINATES!!  Use FW_FIX macro
  150. Binding:
  151.     longint;                // Use FW_kFixedBounds by default, see constants in "FWViews.k"        
  152. };
  153.  
  154. //========================================================================================
  155. // type FW_RSuperView
  156. //========================================================================================
  157.  
  158.  
  159. type FW_RSuperView : FW_RView(Label='suvw')
  160. {
  161.     // Automatic variables used to define subviews with a reference back to this superview
  162.     auto ownerClass = gClassID;
  163.     auto ownerView = gObjectID;
  164.  
  165.     // Variables used in FW_RRadioCluster to keep a reference back to this superview
  166.     //  [LSD] this doesn't work if one of the subviews is also a superview because
  167.     //    the statics will be modified before being used in FW_RRadioCluster, but this
  168.     //    should be a rare case. The correct solution is to move these lines AFTER
  169.     //  the list of subviews, but odfrc doesn't like it for superviews without clusters!
  170.     set gSuperViewClassID = ownerClass; 
  171.     set gSuperViewObjectID = ownerView;
  172.  
  173.     // ---- SuperView fields    
  174. Extent:
  175.     FW_RPoint;                // MUST BE FIXED COORDINATES!!  Use FW_FIX macro
  176. IsContentView:
  177.     FW_RBoolean;            // Use 1 to define your content view (= frame by default)
  178. ScrollingDirection:
  179.     integer;                // 0, FW_kXscrolling, FW_kYscrolling or FW_kXYscrolling
  180.  
  181. SubViews:                    // List of SubViews
  182.     integer = $$CountOf(SubViewArray);
  183.     array SubViewArray
  184.     {
  185.         FW_RView(ParentViewClass=ownerClass, ParentViewID=ownerView);
  186.     };
  187.  
  188. #if 0    
  189. // ODFRC bug: cannot add a second array in this resource type for now...
  190. // RadioClusters must be defined in your own resource type (see Form example)
  191. RadioClusters:
  192.     integer = $$CountOf(RadioClusterArray);
  193.     array RadioClusterArray
  194.     {
  195.         FW_RRadioCluster(ViewClass=ownerClass, ViewID=ownerView);
  196.     };
  197. #endif
  198. };
  199.  
  200. //========================================================================================
  201. // type FW_RControl
  202. //========================================================================================
  203. // FW_RControl is an abstract type, you shouldn't create resources directly from that type
  204.  
  205. type FW_RControl : FW_RView(Label='cont')
  206. {
  207. Message:
  208.     longint;    // 0 by default, or message to be sent when control's value changes
  209.                 // Note: use FW_kDefaultButtonMsg & FW_kCancelButtonMsg to define OK and
  210.                 //        Cancel buttons in dialogs (you must #include "FWNotDef.h")
  211. Receiver:
  212.     integer;    // use 0 by default (no receiver), or FW_kViewReceiver or FW_kFrameReceiver
  213.                 // Normally only for push buttons. No effect on scrollbars.
  214.  
  215. InitialValue:
  216.     longint;    // 0 by default, 1 for buttons to turn on, X for scroll-bars, etc.
  217. };
  218.  
  219. //========================================================================================
  220. // type FW_RNativeControl
  221. //========================================================================================
  222. // FW_RNativeControl doesn't add any fields to FW_RControl
  223.  
  224. type FW_RNativeControl : FW_RControl(Label='nctl')
  225. {
  226. };
  227.  
  228. //========================================================================================
  229. // type FW_RButton
  230. //========================================================================================
  231.  
  232. type FW_RButton : FW_RNativeControl(Label='butn')
  233. {
  234. ButtonKind:
  235.     longint;            // FW_kPushButton, etc.   See "FWViews.k"
  236. Font:
  237.     FW_RFont;            // Use FW_SYSTEM_FONT by default
  238. Title:
  239.     FW_RStringData;        // Button label
  240. };
  241.  
  242. //========================================================================================
  243. // type FW_RPopupMenu
  244. //========================================================================================
  245.  
  246. type FW_RPopupMenu : FW_RNativeControl(Label='popm')
  247. {
  248. MacMenuId:
  249.     unsigned integer;    // 'MENU' resource id
  250. TitleWidth:
  251.     integer;            // 0 by default
  252. InitialMenuItem:
  253.     integer;            // 1 by default
  254. MenuVariation:
  255.     unsigned integer;    // See variant codes for pop-up menu in <controls.h>
  256. MenuRefCon:
  257.     longint;            // Used with previous field ('FONT' to display font resources)
  258. Font:
  259.     FW_RFont;            // Use FW_SYSTEM_FONT by default
  260. Title:
  261.     FW_RStringData;        // (odfrc bug: string must be the last field)
  262. };
  263.  
  264. //========================================================================================
  265. // type FW_RScrollBar
  266. //========================================================================================
  267. // Scrollbar resource fields are only important if the scrollbar is used as a separate
  268. // control (i.e. not associated with a Scroller).  
  269. // In most cases the scrollbar is attached to a Scroller which will adjust these values
  270. // automatically.
  271.  
  272. type FW_RScrollBar : FW_RNativeControl(Label='scbr')
  273. {
  274. MinValue:
  275.     integer;            // use 0 by default
  276. MaxValue:    
  277.     integer;            // use 1 by default 
  278. MinorUnits:
  279.     FW_RFixed;            // use FW_ONE by default 
  280. MajorUnits:
  281.     FW_RFixed;            // use FW_ONE by default 
  282. };
  283.  
  284. // Default scrollbar size (Macintosh)
  285. #define FW_SBSIZE        FW_FIX(15)
  286.  
  287. // ODFRC bug: cannot use macros with more than 1 argument for now...
  288. // Standard vertical & horizontal scrollbar bounds inside a frame of size (h,v)
  289. #define FW_STDVERTICALSB(h,v)    {h - FW_SBSIZE, -FW_ONE, h + FW_ONE, v - FW_SBSIZE + FW_ONE}
  290. #define FW_STDHORIZONTALSB(h,v)    {-FW_ONE, v - FW_SBSIZE, h - FW_SBSIZE + FW_ONE, v + FW_ONE}
  291.  
  292. //========================================================================================
  293. // type FW_RGrowBox
  294. //========================================================================================
  295.  
  296. type FW_RGrowBox : FW_RView(Label='grbx')
  297. {
  298. };
  299.  
  300. // ODFRC bug: cannot use macros with more than 1 argument for now...
  301. // Standard growbox bounds inside a frame of size (h,v)
  302. #define FW_STDGROWBOX(h,v)    {h - FW_SBSIZE, v - FW_SBSIZE, h + FW_ONE, v + FW_ONE}
  303.  
  304. //========================================================================================
  305. // type FW_RListBox
  306. //========================================================================================
  307.  
  308. type FW_RListBox : FW_RView(Label='lbox')
  309. {
  310. NumRows:
  311.     integer;                    // Initial number of rows (can change at runtime)
  312. VerticalSB:
  313.     FW_RBoolean;                // = 1 by default to have a scrollbar 
  314. SingleSelection:
  315.     FW_RBoolean;                // 0 -> multiple selections, 1 -> single selection
  316. UseFocusFrame:
  317.     FW_RBoolean;                // Use 1 to draw a frame when list has keyboard focus
  318. UseClientData:
  319.     FW_RBoolean;                // Use 1 to store 32bit values in 2nd hidden column
  320. DblClickMessage:
  321.     longint;                    // 0 -> list uses default FW_kListBoxDoubleClickedMsg message 
  322. Font:
  323.     FW_RFont;                    // Use FW_NORMAL_FONT by default
  324. StringItems:
  325.     integer = $$CountOf(ItemsArray);
  326.     array ItemsArray
  327.     {
  328.         FW_RStringData;            // List of string items (or leave "{ }" if empty)
  329.     };
  330. };
  331.  
  332. //========================================================================================
  333. // type FW_RStaticText
  334. //========================================================================================
  335.  
  336. type FW_RStaticText : FW_RView(Label='stxt')
  337. {
  338. Font:
  339.     FW_RFont;            // Use FW_NORMAL_FONT by default
  340. Text:
  341.     FW_RStringData;
  342. };
  343.  
  344. //========================================================================================
  345. // type FW_RGroupBox
  346. //========================================================================================
  347.  
  348. type FW_RGroupBox : FW_RStaticText(Label='gpbx')
  349. {
  350.     // A GroupBox doesn't add any field to a StaticText, it's just drawn differently
  351. };
  352.  
  353. //========================================================================================
  354. // type FW_REditView
  355. //========================================================================================
  356.  
  357. type FW_REditView : FW_RView(Label='edvw')
  358. {
  359. MaxChars:
  360.     integer;
  361. Attributes:
  362.     integer;            // Use bit values defined in "FWEdView.h"
  363.                         // Default should be 13 = kDrawBox + kWordWrap + kAutoScroll
  364. Font:
  365.     FW_RFont;            // Use FW_NORMAL_FONT by default
  366. Text:
  367.     FW_RStringData;        // Initial text (odfrc bug: FW_RStringData must be the last field)
  368. };
  369.  
  370. //========================================================================================
  371. // type FW_RPrivBaseScroller
  372. //========================================================================================
  373.  
  374. type FW_RPrivBaseScroller : FW_RArchivableObject(Label='bscl')
  375. {
  376. };
  377.  
  378. //========================================================================================
  379. // type FW_RScroller
  380. //========================================================================================
  381.  
  382. type FW_RScroller : FW_RPrivBaseScroller(Label='sclr')
  383. {
  384.     // Hidden fields to keep a reference to the frame used during the scroller initialization
  385.     integer = FW_kPrivIDOnly;
  386. EnclosureFrameClass:
  387.     longint = FW_kPrivNULLObjectID;
  388.     integer = FW_kPrivIDOnly;
  389. EnclosureFrameID:
  390.     longint = FW_kPreregisteredFrameObject;
  391.  
  392.     // ----- FW_RScroller fields
  393.     //         (odfrc bug: the Fixed field must come before the Point field)
  394. AutoScrollInset:
  395.     FW_RFixed;            // Use 0 or FW_FIX(a)
  396. AutoScrollIncrement:
  397.     FW_RPoint;            // {0,0} -> no auto-scroll, or else { FW_FIX(h), FW_FIX(v) }
  398. };
  399.  
  400. //========================================================================================
  401. // type FW_RScrollBarScroller
  402. //========================================================================================
  403.  
  404. type FW_RScrollBarScroller : FW_RScroller(Label='sbsc')
  405. {
  406. HorizViewID:
  407.     longint;            // Horizontal scrollbar id
  408. VertViewID:
  409.     longint;            // Vertical scrollbar id
  410. };
  411.  
  412. //========================================================================================
  413. // type FW_RViewLayout
  414. //========================================================================================
  415. //
  416. // NOTE: Most parts will use FW_RFrameLayout (see below).  FW_RViewLayout should only be
  417. // used if you are loading a view layout into a superview that is NOT a frame.  If
  418. // FW_CFrame::CreateSubViewsFromStream is called for a stream that contains an
  419. // FW_RViewLayout then you'll get errors at runtime.
  420. //
  421.  
  422. type FW_RViewLayout(FW_kViewLayoutType)
  423. {
  424.     // Variables used in FW_RRadioCluster to keep a reference back to this superview
  425.     //  [LSD] See problem described above in FW_RSuperView
  426.     static gSuperViewClassID = FW_kPrivNULLObjectID; 
  427.     static gSuperViewObjectID = FW_kPreregisteredRootViewObject;
  428.  
  429.     // The LayoutSize defines a reference size for the SuperView or Frame.
  430.     // Its value is not important because all the views will be resized at runtime 
  431.     // to adjust to the real frame size defined by the part. What is important is the 
  432.     // placement of the subviews relative to this reference size and their binding flags.
  433. LayoutSize:
  434.     FW_RPoint;
  435.  
  436.     // List of SubViews
  437. Views:
  438.     integer = $$CountOf(ViewArray);
  439.     array ViewArray
  440.     {
  441.         FW_RView(ParentViewClass=FW_kPrivNULLObjectID, ParentViewID=FW_kPreregisteredRootViewObject);
  442.     };
  443.  
  444. #if 0
  445. // ODFRC bug: cannot add a second array in this resource type for now
  446. RadioClusters:
  447.     integer = $$CountOf(RadioClusterArray);
  448.     array RadioClusterArray
  449.     {
  450.         FW_RRadioCluster(ViewClass=FW_kPrivNULLObjectID, ViewID=FW_kPreregisteredRootViewObject);
  451.     };
  452. #endif
  453. };
  454.  
  455. //========================================================================================
  456. // type FW_RFrameLayout
  457. //========================================================================================
  458.  
  459. type FW_RFrameLayout(FW_kViewLayoutType) : FW_RViewLayout
  460. {
  461.     // By convention, a frame contains 0 or 1 scroller.
  462.     // The only (convenient) way to have zero scrollers is with an array.
  463.     // Declaring more than 1 scroller will result in a runtime error (assert) 
  464.     integer = $$CountOf(ScrollerArray);
  465.     array ScrollerArray
  466.     {
  467.         FW_RScroller;
  468.     };
  469. };
  470.  
  471. #endif
  472.